<?php

declare(strict_types=1);

namespace App\Helpers;

use gullevek\dotEnv\DotEnv;

/**
 * Administra las variables de entorno.
 */
class Env
{
    private const PATH = __DIR__.'/../../';

    private const FILENAME = '.env';

    /**
     * Carga variables de entorno desde un archivo.
     */
    public static function readFile(): void
    {
        DotEnv::readEnvFile(self::PATH, self::FILENAME);
    }

    /**
     * Convierte un string de nombre de variable con puntos a guiones bajos.
     *
     * Ejemplo: app.base.url -> APP_BASE_URL
     */
    private static function replace(string $varname): string
    {
        return strtoupper(str_replace('.', '_', $varname));
    }

    /**
     * Obtiene el valor de una variable de entorno.
     */
    public static function get(string $varname, mixed $default = null): mixed
    {
        $varname = self::replace($varname);

        return $_ENV[$varname] ?? $_SERVER[$varname] ?? $default;
    }

    /**
     * Establece el valor de una variable de entorno.
     */
    public static function set(string $varname, mixed $value): void
    {
        $varname = self::replace($varname);

        $_ENV[$varname] = $value;
    }
}
